package com.boot.commoncore.utils;

import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

// Bean拷贝工具类:提供单个Bean的拷贝和List<Bean>(多个Bean)的拷贝
public class BeanCopyUtil extends BeanUtils {
    // 单个简单Bean拷贝(属性一一对应):直接使用BeanUtils提供的copyProperties()方法进行拷贝

    /**
     * List集合数据的拷贝(Bean的属性一一对应)
     * @param sources 数据源类
     * @param target 目标类::new(例如UserVO::new)
     * @return 拷贝结果
     * @param <S> 源目标类型
     * @param <T> 目标对象类型
     */
    public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
        List<T> list = new ArrayList<>(sources.size());
        for (S source : sources) {
            T t = target.get();
            copyProperties(source, t);
            list.add(t);
        }
        return list;
    }
}
